/**
 * 
 */
package br.gov.sjc.socialalimenta;

import br.org.sjc.validacao.Sair;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * @author rodrigo.ramos
 *
 */
public class EnderecoActivity extends Sair {
	String TAG = "EnderecoActivity";
	//Declara base de dados
	public static SQLiteDatabase BancoDados = null;
	public static String nomeBanco = "SocialAlimenta";
	public void openDB(){
		try{
			BancoDados = openOrCreateDatabase(nomeBanco,MODE_WORLD_READABLE,null);
			//File dbFile = new File(Environment.getExternalStorageDirectory(), nomeBanco);
			//BancoDados = SQLiteDatabase.openOrCreateDatabase(dbFile,null);
			Log.v("EnderecoActivity", "BancoDados.openOrCreateDatabase();");
		}catch (Exception E){
			Log.e("EnderecoActivity", "Erro em BancoDados.close();"+E.getMessage());
		} 
	}
	public void closeDB(){
		BancoDados.close();
		Log.v("EnderecoActivity", "BancoDados.close();");
	}
	//Declara TextBox
	EditText tbLogradouro, tbNumero,tbAp,tbBloco, tbComplemento,tbCep ;
	EditText tbReferencia;
	AutoCompleteTextView actvBairro;
	// Declara Buttons
	Button btnEnVoltar, btnEnIr;

	//Declara base de dados
	// SQLiteDatabase BancoDados = SocialAlimenta2Activity.BancoDados ;

	//Pega o numero do Sias em uso atual
	NumeroSias ns = new NumeroSias();
	int NumSias = ns.getNumeroDaFamilia();
	int ID;

	//Declara Cursor
	Cursor cVerifica;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.endereco);
		registerBaseActivityReceiver();
		openDB();

		btnEnVoltar = (Button) findViewById(R.endereco.btnVoltar);
		btnEnIr = (Button) findViewById(R.endereco.btnIr);
		tbLogradouro = (EditText) findViewById(R.endereco.tbLogradouro);
		tbNumero = (EditText) findViewById(R.endereco.tbNumero);
		tbAp = (EditText) findViewById(R.endereco.tbAp);
		tbBloco = (EditText) findViewById(R.endereco.tbBloco);
		tbComplemento = (EditText) findViewById(R.endereco.tbComplemento);
		tbCep = (EditText) findViewById(R.endereco.tbCep);
		tbReferencia = (EditText) findViewById(R.endereco.tbReferencia);

		actvBairro = (AutoCompleteTextView) findViewById(R.endereco.actvBairro);
		ArrayAdapter<CharSequence> adpactvBairro = ArrayAdapter.createFromResource(
				this, R.array.Bairro,
				android.R.layout.simple_list_item_1);
		actvBairro.setAdapter(adpactvBairro);

		/** Inicia o set de dados caso haja dados */
		if (verificaRegistro(NumSias)){
			setarDados(ID);
			Log.v("EnderecoActivity", "onCreate() Com dados do SiasN: "+NumSias+"ID: "+ID);
		}else{
			//Num tem seNão
			Log.v("EnderecoActivity", "onCreate() Com dados vazios ");
		}

		/** Acao do botao Voltar */
		btnEnVoltar.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				/** InitComponents */
				Intent ittEnVoltar = new Intent(getApplicationContext(), progressoActivity.class);
				closeDB();
				startActivity(ittEnVoltar);
			}
		});//fim acao do botao voltar

		/** Acao do botao Prox */
		btnEnIr.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				validaRegistro();
			}
		});//fim acao do botao Px
	}

	protected void validaRegistro() {
		// valida registros antes de serem persistidos na tabela
		if(tbLogradouro.getText().toString().equals("")){
			Toast.makeText(EnderecoActivity.this, "Endereço está Vazio", Toast.LENGTH_LONG).show();
		}else if(tbNumero.getText().toString().equals("")){
			Toast.makeText(EnderecoActivity.this, "Número está Vazio", Toast.LENGTH_LONG).show();
		}else if(actvBairro.getText().toString().equals("")){
			Toast.makeText(EnderecoActivity.this, "Bairro está Vazio", Toast.LENGTH_LONG).show();
		}else {
			if (verificaRegistro(NumSias)){
				alteraRegistro(ID);
			}else{
				salvaDados(NumSias,tbLogradouro.getText().toString(), tbNumero.getText().toString(), tbAp.getText().toString(), tbBloco.getText().toString(), tbComplemento.getText().toString(),  tbReferencia.getText().toString(), tbCep.getText().toString(), actvBairro.getText().toString());
			}
			/** InitComponents */
			Intent ittEnIr = new Intent(getApplicationContext(), LocalizadoActivity.class);
			closeDB();
			startActivity(ittEnIr);
		}/**/
	}
	//CREATE TABLE IF NOT EXISTS tab_SocialA_Endereco(_id INTEGER PRIMARY KEY, SiasN INT, End TEXT,numero INT, Ap TEXT, Bloco TEXT, Complemento TEXT,Referencia TEXT, CEP TEXT)";
	public void salvaDados(int string, String string2, String string3, String string4, String string5, String string6, String string7, String string8, String string9){
		try{

			String SQL = "INSERT INTO tab_SocialA_Endereco(SiasN, Endereco ,numero , Ap , Bloco , Complemento ,Referencia , CEP, Bairro) VALUES ('"+string+"', '"+string2+"','"+string3+"', '"+string4+"','"+string5+"', '"+string6+"', '"+string7+"', '"+string8+"', '"+string9+"')";
			BancoDados.execSQL(SQL);
			Toast.makeText(this, "Gravando Dados da Família:"+NumSias, Toast.LENGTH_LONG).show();
			//Toast.makeText(EnderecoActivity.this, "Salvo", Toast.LENGTH_LONG).show();
		}catch(Exception erro) {
			mensagemAlerta("Erro","Erro Ao Gravar " + erro.getMessage());
		}
	}
	public boolean verificaRegistro(int NumeroSias){
		boolean Retorno = false;
		try{
			String SQLQuery = "Select * from tab_SocialA_Endereco WHERE SiasN="+NumeroSias+" ";
			cVerifica = BancoDados.rawQuery(SQLQuery, null);
			if (cVerifica.getCount() !=0 ){
				cVerifica.moveToFirst();
				ID = cVerifica.getInt(cVerifica.getColumnIndex("_id"));
				Retorno = true;
				Log.i("EnderecoActivity", "verificaRegistro() TRUE ");
			}
		}catch (Exception Err){
			//mensagemAlerta("Erro","Erro Encontrado:"+Err.getMessage());
			Log.e("EnderecoActivity", "verificaRegistro() "+Err.getMessage());
		}
		return Retorno;

	}
	public void setarDados(int Posicao){
		try {
			String SQL2 = "SELECT * FROM tab_SocialA_Endereco WHERE _id="+Posicao+" ";
			Log.v("EnderecoActivity", "setarDados() Posição: "+Posicao);
			Cursor c = BancoDados.rawQuery(SQL2, null);
			c.moveToFirst();
			//SiasN , End ,numero , Ap , Bloco , Complemento ,Referencia , CEP, Bairro
			do {
				tbLogradouro.setText(c.getString(c.getColumnIndex("Endereco")));
				tbNumero.setText(c.getString(c.getColumnIndex("numero")));
				tbAp.setText(c.getString(c.getColumnIndex("Ap")));
				tbBloco.setText(c.getString(c.getColumnIndex("Bloco")));
				tbComplemento.setText(c.getString(c.getColumnIndex("Complemento")));
				tbCep.setText(c.getString(c.getColumnIndex("CEP")));
				tbReferencia.setText(c.getString(c.getColumnIndex("Referencia")));
				actvBairro.setText(c.getString(c.getColumnIndex("Bairro")));
			}while(c.moveToNext());
			Log.v("EnderecoActivity", "setarDados() TRUE ");
		}catch (Exception E){
			mensagemAlerta("Erro","Ocorreu um erro inesperado");
			Log.e("EnderecoActivity", "Erro em setarDados() "+E.getMessage());
		}
	}
	public void alteraRegistro(int id){
		try{
			String uSQL = "UPDATE tab_SocialA_Endereco SET " +
					" Endereco='"+tbLogradouro.getText().toString()+"'," +
					" numero='"+tbNumero.getText().toString()+"'," +
					" Ap='"+tbAp.getText().toString()+"'," +
					" Bloco='"+tbBloco.getText().toString()+"'," +
					" Complemento='"+tbComplemento.getText().toString()+"'," +
					" CEP='"+tbCep.getText().toString()+"'," +
					" Referencia='"+tbReferencia.getText().toString()+"'," +
					" Bairro='"+actvBairro.getText().toString()+"'" +
					" WHERE _id="+id+" ";
			BancoDados.execSQL(uSQL);
			Toast.makeText(EnderecoActivity.this, "Alterado", Toast.LENGTH_LONG).show();
			Log.v("EnderecoActivity", "alteraRegistro() realizado com sucesso ");
		}catch(Exception Err){
			mensagemAlerta("Erro","Ocorreu um erro inesperado");
			Log.e("EnderecoActivity", "alteraRegistro() erro: "+Err.getMessage());

		}

	}
	public void mensagemAlerta(String AlertTitle, String MSGAlert){
		AlertDialog.Builder Mensagem = new AlertDialog.Builder(EnderecoActivity.this);
		Mensagem.setTitle(AlertTitle);
		Mensagem.setMessage(MSGAlert);
		Mensagem.setNeutralButton("Ok", null);
		Mensagem.show();
	}
	@Override
	protected void onResume() {
		//quando a Activity main receber o foco novamente abre-se novamente a conexão
		openDB();
		//método responsável pela atualiza da lista de dados na tela
		//adapter.notifyDataSetChanged();
		super.onResume();
	}
	@Override
	protected void onPause() {

		//toda vez que o programa peder o foco fecha-se a conexão com o BD
		closeDB();
		super.onPause();
	}
    @Override
    protected void onDestroy() {
    	super.onDestroy();
    	unRegisterBaseActivityReceiver();
    	finish();
    }
}
